package com.niuwa.p2p.service.filesystem;

import java.io.File;
import java.io.InputStream;
import java.util.List;

import com.niuwa.p2p.core.constant.FileSystemEnum;
import com.niuwa.p2p.entity.nwfile.NWFile;

/**
 * 文件存储 update by tennyqin
 * 
 * @author zhouzhengfa
 *
 */
public interface FileSystem {

	/**
	 * 存储public文件
	 * 
	 * @param file
	 * @return
	 * @throws Exception
	 */
	public String savePublicFile(File file) throws Exception;

	/**
	 * 存储private文件
	 * 
	 * @param file
	 * @return
	 * @throws Exception
	 */
	public String savePrivateFile(File file) throws Exception;

	/**
	 * 根据文件ID获取当前文件
	 * 
	 * @param fileID
	 * @return
	 * @throws Exception
	 */
	public File getFile(String fileID) throws Exception;

	/**
	 * 根据文件ID当前删除文件原图和temp图
	 * 
	 * @param fileID
	 * @throws Exception
	 */
	public void deleteFile(String fileID) throws Exception;

	/**
	 * 根据文件ID获取多个文件【大图，中图，小图】
	 * 
	 * @param fileID
	 * @return
	 * @throws Exception
	 */
	public List<String> getImageFiles(String fileID) throws Exception;

	/**
	 * 根据文件ID删除多个文件【大图，中图，小图,temp图】
	 * 
	 * @param fileID
	 * @throws Exception
	 */
	public void deleteImageFiles(String fileID) throws Exception;

	/**
	 * @param file
	 *            文件 保存图片文件public/private【默认配置文件的几种比例压缩存放】
	 */

	public String saveImageFile(FileSystemEnum fileSystemEnum, File file)
			throws Exception;

	/**
	 * 保存图片文件【默认配置文件的几种比例压缩存放，并且添加图片水印】 图片水印默认调用设置的牛娃图片
	 */
	public String saveImageWatermark(FileSystemEnum fileSystemEnum, File file)
			throws Exception;

	/**
	 * 保存文件通过字节流的方式写入
	 * 
	 * @param fileSystemEnum
	 * @param is
	 * @param fileType
	 *            [txt/jpg/html]文件后缀
	 * @return
	 */
	public String saveFileByStream(FileSystemEnum fileSystemEnum,
			InputStream is, String fileType);

	/**
	 * 保存文件通过字符串的方式写入
	 * 
	 * @param fileSystemEnum
	 * @param is
	 * @param fileType
	 *            [txt/jpg/html]文件后缀
	 * @return
	 */
	public String saveFileByStream(FileSystemEnum fileSystemEnum,
			String strContent, String fileType);

	/**
	 * 获取数据库里面的文件内容 根据文件ID获取
	 */
	public NWFile getDBFileInfo(String fileID) throws Exception;
}